//
// 顺序图
// Created by 麻再挺 on 2021/12/16.
//

#ifndef DATA_STRUCTURE_C_ORDER_GRAPH_H
#define DATA_STRUCTURE_C_ORDER_GRAPH_H

#include <stdio.h>
#include <stdlib.h>
#include "graph_constant.h"

// 图结点实体
typedef struct {
    // 对于无权图, 用 1 或 0 表示是否相邻; 对于带权图, 直接为权值
    VRType adj;
    // 弧或边额外含有的信息
    InfoType *info;
} ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

// 图结构
typedef struct {
    // 存储图中的顶点数据
    VertexType vex[MAX_VERTEX_NUM];
    // 二维数组, 记录顶点之间的关系
    AdjMatrix arcs;
    // 记录图的顶点数和弧数
    int vexNum, arcNum;
    // 记录图的种类
    GraphKind kind;
} MGraph;

/**
 * 创建图
 * @param g 图
 * @param vexNum 顶点数
 * @param arcNum 弧数
 * @param arr 有向图, 无向图数组
 * @param arrW 有向网, 无向网数组, 多了个权值
 */
void CreateGraph(MGraph *g, int vexNum, int arcNum, int arr[], int arrW[]);

/**
 * 打印图
 * @param g 图
 */
void PrintGraph(MGraph g);


#endif //DATA_STRUCTURE_C_ORDER_GRAPH_H












